import path from 'path'

import { ConfigEnv, UserConfig } from 'vite'
import { createProxySever } from './config/proxy'
import { createVitePlugins } from './config/plugins'

// 路径转换函数
const resovePath = (paths: string) => path.resolve(__dirname, paths)

//https://cn.vitejs.dev/config
export default ({ command, mode }: ConfigEnv): UserConfig => {
  const { port, proxy } = createProxySever(mode)
  const isBuild = command === 'build'
  return {
    plugins: createVitePlugins(isBuild),
    // 配置项目别名
    resolve: {
      alias: {
        '@': resovePath('src'),
      },
    },
    css: {
      preprocessorOptions: {
        scss: {
          // 配置导入全局变量
          additionalData: `@import "./src/styles/global.scss";`,
        },
        less: {}, // 如果你的是less
      },
    },
    // 服务
    server: {
      // hmr: { overlay: false }, // 禁用或配置 HMR 连接 设置 server.hmr.overlay 为 false 可以禁用服务器错误遮罩层
      open: true, // 类型： boolean | string在服务器启动时自动在浏览器中打开应用程序；
      cors: true, // 类型： boolean | CorsOptions 为开发服务器配置 CORS。默认启用并允许任何源
      host: '0.0.0.0', // IP配置，支持从IP启动
      port, // 类型： number 指定服务器端口;
      proxy, // 接口代理服务配置
    },

    // 打包
    build: {
      target: 'es2015',
      outDir: 'build', // 自定义打包文件名
      assetsDir: 'dist', // 自定义静态文件打包目录
      terserOptions: {
        compress: {
          keep_infinity: true,
          drop_console: true, // 删除console
        },
      },
      rollupOptions: {
        // 确保外部化处理那些你不想打包进库的依赖
        external: [],
      },
      brotliSize: false,
      chunkSizeWarningLimit: 2000,
    },
  }
}
